package cn.outsourcing.supermarket.service;

import cn.outsourcing.supermarket.common.PageResult;
import cn.outsourcing.supermarket.dto.CategoryGoodsPageDTO;
import cn.outsourcing.supermarket.dto.GoodsListSearchDTO;
import cn.outsourcing.supermarket.po.HiolabsGoods;
import cn.outsourcing.supermarket.vo.CategoryGoodsVO;
import cn.outsourcing.supermarket.vo.GoodsDetailsVO;
import cn.outsourcing.supermarket.vo.foot.FootGoodsVO;
import cn.outsourcing.supermarket.vo.hiolabs.HiolabsGoodsVO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
 * 商品服务类
 *
 * @author gzkemays
 * @since 2021-10-20
 */
public interface HiolabsGoodsService extends IService<HiolabsGoods> {
  /**
   * 根据分类商品数据,返回分页数据.
   *
   * @param categoryGoodsPage 分类商品页
   * @param isHome 是否为主页
   * @return Goods 缺省对象
   */
  PageResult<CategoryGoodsVO> getCategoryGoods(
      CategoryGoodsPageDTO categoryGoodsPage, boolean isHome);

  /**
   * 商品详情信息
   *
   * @param id 商品id
   * @return {@link GoodsDetailsVO} 详情所需数据
   */
  GoodsDetailsVO getGoodsDetails(Integer id);

  /**
   * 获取商品列表
   *
   * @param entity 商品条件搜索
   * @return 商品列表
   */
  List<HiolabsGoodsVO> getGoodsList(GoodsListSearchDTO entity);

  /**
   * 获取全部商品的数量
   *
   * @return data: {goodsCount: 48}
   */
  Map<String, Integer> getCount();

  /**
   * 获取足迹商品对象
   *
   * @param goodsId 商品 id
   * @return 足迹商品对象
   */
  FootGoodsVO getFootGoods(Integer goodsId);

  /**
   * 减少商品库存
   *
   * @param goodsId 商品 id
   * @param number 减少的库存数
   * @return 执行结果
   */
  int reduceStock(Integer goodsId, Integer number);
}
